import util.Tool;

public class Program {
    private Tool tool = new Tool("单例工具");

    /**
     * 饿汉加载，在程序启动时就完成初始化
     */
    public Program(boolean isLazy) {
        System.out.println("程序启动");
        if (!isLazy)
            this.tool = new Tool("饿汉加载单例");
    }

    public Tool getTool() {
        // 懒汉加载，但在单例模式下容易出现线程安全问题，所以需要加锁，通过双重检查锁定（Double-Checked Locking）避免重复创建
        if (null == tool) {
            synchronized (this) {
                if (null == tool) {
                    tool = new Tool("懒汉加载单例");
                }
            }
        }
        return tool;
    }
}
